package com.atguigu.lease.admin.task;

import com.atguigu.lease.admin.service.LeaseAgreementService;
import com.atguigu.lease.model.bean.LeaseAgreement;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Slf4j
@Component //组件注解！！ 注入到ioc容器
public class WebAdminTask {

    @Autowired
    private LeaseAgreementService leaseAgreementService;

    @Scheduled(cron= "0 0 0 * * *")
    //    @Scheduled(cron= "0 2 * * * *")
    public void checkLeaseAgreementStatus(){
        //通过更新的sql可以合并到一起
        //1、查询所有的未删除的租约(状态为2或者5)
        //2、判断租约是否到期 如果到期更新租约的状态为已过期(4)
        // update lease_aggrement set status = 4 where is_deleted = 0 and status in (2,5) and lease_end_date < new Date()
        leaseAgreementService.update(Wrappers.lambdaUpdate(LeaseAgreement.class)
                .in(LeaseAgreement::getStatus, 2,5)
                .lt(LeaseAgreement::getLeaseEndDate, new Date())
                .set(LeaseAgreement::getStatus, 4)
        );

    }
    //启动了定时任务的项目，使用@Scheduled注解标注的 组件类的方法 就是一个定时任务
    // 可以在@Scheduled注解中 通过cron属性设置cron表达式 指定定时任务执行的时间
/*    @Scheduled(cron = "0/5 * * * * *")
    public void printHelloTask(){
        //定时任务的业务代码
        log.warn("定时任务执行了，当前时间：{}" ,
                 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                 .format(new Date()));
    }*/
    //需求： 每天0:0:0秒，检查一次所有的租约，如果有过期的，修改租约的状态为过期！(cron表达式：0 0 0 * * *)
    /*
        cron表达式：
            spring定时任务支持的是阉割版的cron表达式，由六位组成
                > 第一位：表示秒
                > 第二位：表示分
                > 第三位：表示时
                > 第四位：表示日
                > 第五位：表示月
                > 第六位：表示周
                    0 0 0 * * *  ： 每天的0时0分0秒执行
                        秒：0，分：0，时：0， 日月年：* 每年的每月的每日
                    5 5 5 * * * ： 每天的05:05分05秒执行
                    0/5 * * * * * ： 每分钟，从第0秒开始，每过5秒钟执行一次
            > 也可以在线生成cron表达式： 搜索在线生成cron表达式，按照自己的要求选择生成即可
            > xxl-job提供了图形界面，可以点击生成cron表达式
            完整的cron表达式由7位组成
                > 第七位：表示年

     */
}